"""

存储数据的位置：⽂件(student.data)
加载⽂件数据
修改数据后保存到⽂件
存储数据的形式：列表存储学员对象
系统功能
添加学员
删除学员
修改学员
查询学员信息
显示所有学员信息
保存学员信息
退出系统
"""
from student import *
import random


class StudentManager(object):
    def __init__(self):
        # 学生列表
        self.student_list = []

    """
    定义程序⼊⼝函数
    加载数据
    显示功能菜单
    ⽤户输⼊功能序号
    根据⽤户输⼊的功能序号执⾏不同的功能
    定义系统功能函数，添加、删除学员等
    """

    def run(self):
        # 加载学员
        self.load_student()
        while True:
            # 显示菜单
            self.show_menu()
            menu_num = int(input('请输入功能序号:'))
            if menu_num == 1:
                print('1添加学员')
                self.add_student()
                pass
            elif menu_num == 2:
                print('2删除学员')
                self.delete_student()
                pass
            elif menu_num == 3:
                print('3修改学员')
                self.modify_student()
                pass
            elif menu_num == 4:
                print('4查询学员信息')
                self.select_student()
                pass
            elif menu_num == 5:
                print('5显示所有学员信息')
                self.all_student()
                pass
            elif menu_num == 6:
                print('6保存学员信息')
                self.save_student()
                pass
            elif menu_num == 7:
                print('7退出系统')
                break
                pass
            else:
                print("输入错误,请重试")
                pass
            pass
        pass

    def load_student(self):
        """ 
         需求：每次进⼊系统后，修改的数据是⽂件⾥⾯的数据
        步骤
        尝试以 "r" 模式打开学员数据⽂件，如果⽂件不存在则以 "w" 模式打开⽂件
        如果⽂件存在则读取数据并存储数据
        读取数据
        转换数据类型为列表并转换列表内的字典为对象
        存储学员数据到学员列表
        关闭⽂件
         """
        try:
            f = open("student.data", 'r')
            try:
                str = f.read()
                new_list = eval(str)
                # 2. ⽂件中读取的数据都是字符串且字符串内部为字典数据，故需要转换数据类型再
                # 转换字典为对象后存储到学员列表
                self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
                pass
            except:
                pass
            finally:
                f.close()
            pass
        except:
            print("文件不存在")
            f = open("student.data", 'w')
            pass
        finally:
            f.close()
            pass
        pass

    def save_student(self):
        """
        需求：将修改后的学员数据保存到存储数据的⽂件。
        步骤
        打开⽂件
        ⽂件写⼊数据
        关闭⽂件
        :return: 
        """
        try:
            f = open("student.data", 'w')
            try:
                # [{'name': 'aaa', 'gender': 'nan', 'tel': '11111111'}] 
                str1 = [i.__dict__ for i in self.student_list]
                print(str1)
                f.write(str(str1))
                pass
            except:
                pass
            finally:
                f.close()
            pass
        except:
            print("文件不存在")
            pass
        finally:
            pass
        pass

    @staticmethod
    def show_menu():
        print("""
            系统功能
            1添加学员
            2删除学员
            3修改学员
            4查询学员信息
            5显示所有学员信息
            6保存学员信息
            7退出系统
        """)
        pass

    def add_student(self):
        """
        需求：⽤户输⼊学员姓名、性别、⼿机号，将学员添加到系统。
        步骤
        ⽤户输⼊姓名、性别、⼿机号
        创建该学员对象
        将该学员对象添加到列
        :return: 
        """

        tel = 'tel' + str(random.randint(0, 20))
        gender = random.choice(['男', '女'])
        name = 'name' + str(random.randint(0, 20))
        student = Student(name, gender, tel)
        # 就是这样子
        self.student_list.append(student)

        str1 = [i.__dict__ for i in self.student_list]
        print(str1)
        pass

    def modify_student(self):
        """
        需求：⽤户输⼊⽬标学员姓名，如果学员存在则修改该学员信息。
        步骤
        ⽤户输⼊⽬标学员姓名；
        遍历学员数据列表，如果⽤户输⼊的学员姓名存在则修改学员的姓名、性别、⼿机号数据，
        否则则提示该学员不存在。
        :return: 
        """
        name = input("请输入姓名:")
        for student in self.student_list:
            if student.name == name:
                tel = 'tel' + str(random.randint(0, 20))
                gender = random.choice(['男', '女'])
                name = 'name' + str(random.randint(0, 20))
                student.name = name
                student.gender = gender
                student.tel = tel
                break
                pass
            pass
        else:
            print("查无此人")
            pass
        # 就是这样子
        str1 = [i.__dict__ for i in self.student_list]
        print(str1)
        pass

    def delete_student(self):
        """
        需求：⽤户输⼊⽬标学员姓名，如果学员存在则删除该学员。
        步骤
        ⽤户输⼊⽬标学员姓名
        遍历学员数据列表，如果⽤户输⼊的学员姓名存在则删除，否则则提示该学员不存在。
        :return: 
        """
        name = input("请输入姓名:")
        for student in self.student_list:
            if student.name == name:
                self.student_list.remove(student)
                break
                pass
            pass
        else:
            print("查无此人")
            pass
        # 就是这样子
        str1 = [i.__dict__ for i in self.student_list]
        print(str1)
        pass

    def select_student(self):
        """
        需求：⽤户输⼊⽬标学员姓名，如果学员存在则打印该学员信息
        步骤
        ⽤户输⼊⽬标学员姓名
        遍历学员数据列表，如果⽤户输⼊的学员姓名存在则打印学员信息，否则提示该学员不存
        在。
        :return: 
        """
        name = input("请输入姓名:")
        for student in self.student_list:
            if student.name == name:
                print(student)
                break
                pass
            pass
        else:
            print("查无此人")
            pass
        # 就是这样子
        pass

    def all_student(self):
        """
        打印所有学员信息
        步骤
        遍历学员数据列表，打印所有学员信息
        :return: 
        """
        for student in self.student_list:
            print(student)
            pass
        pass


pass
